package hash;

import org.apache.commons.codec.binary.Base64;
import org.junit.Test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test3Encryption {

    @Test
    public void test1() {
        try {
            MessageDigest md = MessageDigest.getInstance("md5");
            md.update("hello".getBytes());
            String s = md.digest().toString();
            System.out.println();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * MD5算法得到的摘要是固定为 128 bit 的二进制串（一堆0和1，一共128个），为了更友好的表示摘要，
     * 一般都将 128位的二进制串 转为 32个16进制位 或 16个16进制位 如下
     * 常用的 Commons-codec
     */
    @Test
    public void test2() {
        String str = "1234567890";
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            //digest()方法中隐式调用了这个update(但有无这步，摘要还不同 ？)
            digest.update(str.getBytes());//数据传递
            byte[] aa = digest.digest();//计算摘要

            //数组长度16个字节 16*8=128一般把这些字节转换成字符串，
            // 转换方法见  https://blog.csdn.net/zheyangyebuxingaaa/article/details/81810892
            System.out.println(aa.length);

            //也可以用base64，base64就是用64个可打印字符来表示二进制的方法
            //see https://blog.csdn.net/u013368397/article/details/82563136
            //see https://blog.csdn.net/wo541075754/article/details/81734770
            //不建议使用这个  建议使用apache comons 的替换  Base64.encodeBase64String(encrypted);

            String aaStr = Base64.encodeBase64String(aa);
            System.out.println(new String(aaStr));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

}
